package com.masita.logica;

import java.sql.*;
import java.util.Vector;

import com.masita.util.Utilidad;

public class Reclamo {
	
	private int id_reclamo;
	private int id_ficha;

	private int id_venta;
	private Venta venta;
	
	private String fecha_reclamo;
	private int cantidad;
	private String estado;
	
	public Reclamo(int id_rec, int id_f, int id_v, String fec, int cant,
				   String est){
		this.id_reclamo = id_rec;
		this.id_ficha = id_f;
		this.id_venta = id_v;
		this.fecha_reclamo = new String(fec);
		this.cantidad = cant;
		this.estado = new String(est);
		
		this.venta = null;
	}

	public Reclamo(int id_rec, int id_f, int id_v, String fec, int cant){
		this.id_reclamo = id_rec;
		this.id_ficha = id_f;
		this.id_venta = id_v;
		this.fecha_reclamo = new String(fec);
		this.cantidad = cant;
		this.estado = new String(Utilidad.ESTADO_RECLAMO_EN_ESPERA);
		
		this.venta = null;		
	}
	// METODO GET DE LA CLASE *****************************	
	public String getEstado(){
		return this.estado;
	}

	public String getFechaReclamo(){
		return fecha_reclamo;
	}

	public int getIdFicha(){
		return this.id_ficha;
	}

	public int getIdReclamo(){
		return id_reclamo;
	}

	public int getIdVenta(){
		return id_venta;
	}

	public int getCantidad(){
		return cantidad;
	}

	public Venta getVenta(){
		if( this.venta == null && this.id_venta != 0 && this.id_ficha != 0 )
			this.venta = Venta.getVenta(this.id_ficha,this.id_venta);
		return venta;
	}

	// METODO SET DE LA CLASE *****************************
	public void setEstado(String s){
		this.estado = new String(s);
	}

	public void setFechaReclamo(String string){
		fecha_reclamo = new String(string);
	}

	public void setIdFicha(int i){
		this.id_ficha = i;
	}

	public void setIdVenta(int i){
		id_venta = i;
		this.venta = null;
	}

	public void setCantidad(int i){
		this.cantidad = i;
	}

	public void setVenta(Venta v){
		if( v != null )
			this.id_venta = v.getIdVenta();
		this.venta = v;
	}
	
	// METODO ESTATICOS DE LA CLASE ***********************
	public static Reclamo getReclamo(int id_r, int id_f){
		try{
			Statement st = Conexion.getStatement();
			String sentencia = "SELECT * FROM reclamo "+							   "WHERE id_reclamo = "+id_r+" AND "+
							   "id_ficha = "+id_f;
			ResultSet rs = st.executeQuery(sentencia);
			if( rs.next() ){
				return new Reclamo(rs.getInt("id_reclamo"), 
								   rs.getInt("id_ficha"),
								   rs.getInt("id_venta"),
								   rs.getString("fecha_reclamo"),
								   rs.getInt("cantidad"),
								   rs.getString("estado"));
			}
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		return null;
	}

	public static Vector getReclamos(int id_f){
		Vector reclamos = null;
		try{
			Statement st = Conexion.getStatement();
			String sentencia = "SELECT * FROM reclamo "+
							   "WHERE id_ficha = "+id_f;
			ResultSet rs = st.executeQuery(sentencia);
			while( rs.next() ){
				if( reclamos == null ) reclamos = new Vector();
				reclamos.addElement( new Reclamo(rs.getInt("id_reclamo"),
												 rs.getInt("id_ficha"),
												 rs.getInt("id_venta"),
												 rs.getString("fecha_reclamo"),
												 rs.getInt("cantidad"),
												 rs.getString("estado")));
			}
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		return reclamos;
	}

	public static Vector getReclamosPendientes(int id_f){
		Vector reclamos = null;
		try{
			Statement st = Conexion.getStatement();
			String sentencia = "SELECT * FROM reclamo "+
							   "WHERE id_ficha = "+id_f+" AND "+
							   "estado = '"+Utilidad.ESTADO_RECLAMO_EN_ESPERA+"'";
			ResultSet rs = st.executeQuery(sentencia);
			while( rs.next() ){
				if( reclamos == null ) reclamos = new Vector();
				reclamos.addElement( new Reclamo(rs.getInt("id_reclamo"),
												 rs.getInt("id_ficha"),
												 rs.getInt("id_venta"),
												 rs.getString("fecha_reclamo"),
												 rs.getInt("cantidad"),
												 rs.getString("estado")));
			}
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		return reclamos;
	}

	public static Vector getReclamoPorProducto(int id_p){
		Vector reclamos = null;
		try{
			Statement st = Conexion.getStatement();
			String sentencia = "SELECT * FROM reclamo "+
							   "WHERE id_producto = "+id_p;
			ResultSet rs = st.executeQuery(sentencia);
			while( rs.next() ){
				if( reclamos == null ) reclamos = new Vector();
				reclamos.addElement( new Reclamo(rs.getInt("id_reclamo"),
												 rs.getInt("id_ficha"),
												 rs.getInt("id_venta"),
												 rs.getString("fecha_reclamo"),
												 rs.getInt("cantidad"),
												 rs.getString("estado")));
			}
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		return reclamos;
	}
	
	public static Vector getReclamosPendientes(){
		Vector reclamos = null;
		try{
			Statement st = Conexion.getStatement();
			String sentencia = "SELECT * FROM reclamo "+
							   "WHERE estado = '"+
							   Utilidad.ESTADO_RECLAMO_EN_ESPERA+"'";
			ResultSet rs = st.executeQuery(sentencia);
			while( rs.next() ){
				if( reclamos == null ) reclamos = new Vector();
				reclamos.addElement( new Reclamo(rs.getInt("id_reclamo"),
												 rs.getInt("id_ficha"),
												 rs.getInt("id_venta"),
												 rs.getString("fecha_reclamo"),
												 rs.getInt("cantidad"),
												 rs.getString("estado")));
			}
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		return reclamos;
	}
	
	// METODO GUARDAR DATOS DE LA CLASE *******************
	public int guardarDatos(){
		try{
			Statement st = Conexion.getStatement();
			String sentencia;
			if(this.id_reclamo == 0 ){
				sentencia = "INSERT INTO reclamo VALUES(0,"+this.id_ficha+
							","+this.id_venta+",'"+this.fecha_reclamo+
							"',"+this.cantidad+",'"+this.estado+"')";
				st.executeUpdate(sentencia);
				ResultSet rs = st.getGeneratedKeys();
				if( rs.next() ) this.id_reclamo = rs.getInt(1);
			}
			else{
				sentencia = "UPDATE reclamo SET id_venta = "+this.id_venta+
				", cantidad = "+this.cantidad+", fecha_reclamo = '"+
				this.fecha_reclamo+"', estado = '"+this.estado+
				"' WHERE id_reclamo = "+this.id_reclamo+" AND "+
				"id_ficha = "+this.id_ficha;
				st.executeUpdate(sentencia);
			}
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		return this.id_reclamo;		
	}
	
	// METODO ELIMINAR DE LA CLASE ************************
	public boolean eliminar(){
		try{
			if( this.id_reclamo == 0 ) return false;
			
			Statement st = Conexion.getStatement();
			String sentencia = "DELETE FROM reclamo "+
							   "WHERE id_reclamo = "+this.id_reclamo+
							   " AND id_ficha = "+this.id_ficha;
			st.executeUpdate(sentencia);
			this.id_reclamo = 0;
			
			return true;
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		return false;			
	}	
}
